<?php
/**
 * User: LRZ
 * Date: 2020/1/21
 * Time: 16:47
 */

/**
 *  1089.复写零
 *
 *  标签：数组
 *
 *  给你一个长度固定的整数数组 arr，请你将该数组中出现的每个零都复写一遍，并将其余的元素向右平移。
 *  注意：请不要在超过该数组长度的位置写入元素。
 *  要求：请对输入的数组 就地 进行上述修改，不要从函数返回任何东西。
 *
 *  示例 1：
 *      输入：[1,0,2,3,0,4,5,0]
 *      输出：null
 *      解释：调用函数后，输入的数组将被修改为：[1,0,0,2,3,0,0,4]
 *
 *  示例 2：
 *      输入：[1,2,3]
 *      输出：null
 *      解释：调用函数后，输入的数组将被修改为：[1,2,3]
 *   
 *  提示：
 *      1 <= arr.length <= 10000
 *      0 <= arr[i] <= 9
 *
 *  来源：力扣（LeetCode）
 *  链接：https://leetcode-cn.com/problems/duplicate-zeros
 *  著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

$start = microtime(true);

$arr = [0, 4, 1, 0, 0, 8, 0, 0, 3];
$res = duplicateZeros($arr);

$end = microtime(true);
print_r($res);
printf(' total run: %.2f s<br>' . 'memory usage: %.2f M<br> ', $end - $start, memory_get_usage() / 1024 / 1024);

function duplicateZeros(&$arr)
{
    $size = count($arr);
    for ($i = 0; $i < $size - 1; $i++) {
        if ($arr[$i] === 0) {
            for ($j = $size - 1; $j > $i + 1; $j--) {
                $arr[$j] = $arr[$j - 1];
            }
            $arr[$i + 1] = 0;
            $i++;
        }
    }
    return $arr;
}